<blockquote>
    <p>请求类型 [@GET @POST]</p>
    <footer>拥有和Spring基本一样的功能, aa</footer>
</blockquote>
<div class="panel panel-default">
    <div class="panel-body">
        <p><b style="color:red">注意</b>：和Spring对比方法注解上面减少了@ResponseBody 或者 类上面@RestController, 返回类型由方法返回值决定, 我在写一遍如下：</p>
        <p>String 类型：会根据常量里面的配置放回响应的视图类型, 默认是jsp</p>
        <p>Object 类型：当返回Object时候会去掉值为null的属性</p>
        <p>&lt;T&gt 类型：会保留所有属性输出</p>
        <p>Resource 类型：当new Resource("a.txt", data) 时, 可以将resouce下面的文件当做模板进行读取然后响应输出, 例如：druid管理页面, 加强后就是一套模板引擎</p>
        <p>Json 类型：会包装一层响应吗输出</p>
        <div style="margin-left:50px;">
            <p>成功：当Json.success("hello world java!") 时, <code>{"message":"ok","data":"hello world
                java!","code":0}</code></p>
            <p>失败：当Json.fail("code is error!") 时, 或用使用全局枚举 Json.fail(ResponseCode.ARGUMENTS_ERROR), <code>{"message":"code
                is error!","code":107}</code></p>
            <p>数据值为空：当Json.succcess(null) 时, 会报错<code>{"message":"response data is null","code":109}</code></p>
            <p>异常：当Json.exception(ResponseCode.ARGUMENTS_ERROR) 时, 会进行日志记录, 并报错<code>{"message":"request argument is
                error","code":1011}</code></p>
        </div>
    </div>
</div>
<h5><b>String 类型</b> 返回视图, 以下会访问test.jsp 当配置了视图模板[freemarker或beetl]时会返回模板视图</h5>
<div class="clear">
    <p>常量配置 me.setViewType(ViewType.JSP); 默认是JSP视图</p>
    <p>ViewType.FREEMARKER 返回freemarker视图</p>
    <p>ViewType.BEETL 返回beetl视图</p>
    <p>ViewType.VELOCITY 返回velocity视图</p>
</div>
<pre class="code brush:java">
    /**
     * 测试控制器类
     * @author MrShun
     * @version 1.0
     * @Date 2017-10-24
     */
    @Controller("api")
    public class TestController {

       /**
        * 返回一个test.jsp视图
        */
        @GET("/test")
        public String test() {
            return "test.jsp";
        }
    }
</pre>
<h5 class="clear"><b>Object 或 &lt;T&gt; 类型</b> 返回无包装数据, <b>Json 类型</b> 返回包装数据带响应吗</h5>
<pre class="code brush:java">
     /**
     * 测试控制器类
     * @author MrShun
     * @version 1.0
     * @Date 2017-10-24
     */
    @Controller("api")
    public class TestController {

        /**
         * 强制Object, 去掉值为null的属性
         * @return
         */
        @GET("/test")
        public Object test() {
            return "ok";
        }

        /**
         * 输出确定类型对象, 保留所有属性
         * @return
         */
        @GET("/test2")
        public Map test2() {
            Map result = new HashMap();
            result.put("data", "这是条数据");
            return result;
        }

        /**
         * 使用Json包装, 带响应码输出, 去掉值为null的属性
         * @return
         */
        @GET("/test3")
        public Object test3() {
            Map result = new HashMap();
            result.put("data", "这是条数据");
            return Json.success(result);
        }

        /**
         * 使用Json包装, 带响应码输出, 保留所有属性
         * @return
         */
        @GET("/test4")
        public Map test4() {
            Map result = new HashMap();
            result.put("data", "这是条数据");
            return Json.success(result);
        }
    }
</pre>
<h5 class="clear"><b>Resource 类型</b> 返回资源里面的文件</h5>
<pre class="code brush:java">
     /**
     * 测试控制器类
     * @author MrShun
     * @version 1.0
     * @Date 2017-10-24
     */
    @Controller("api")
    public class TestController {

        /**
         * 返回资源里面的文件，可以是网页
         * 也可以是图片, 样式， 脚本文件
         * @return
         */
        @GET("/test")
        public Object test() {
            return new Resource("db.txt");
        }
    }

</pre>
<script type="text/javascript">
    $(function () {
        SyntaxHighlighter.highlight();
        $(".toolbar").remove();
    });
</script>